首先,我們可以搜尋繼承的 abstractAction 的宣告,
各位也可以自行找到檔案,前後看一下是否有 renderElement()
// addons/web/static/src/js/chrome/abstract_action.js
var AbstractAction = Widget.extend(ActionMixin, {
    // ...
});
在 abstractAction 沒有找到 renderElement()
那繼續看 abstractAction 繼承的 ActionMixin 來往上尋找
// addons/web/static/src/js/chrome/action_mixin.js
const ActionMixin = Object.assign({}, WidgetAdapterMixin, {
    // ...
    renderElement: function () {
        this._super.apply(this, arguments);
        if (this.contentTemplate) {
            const content = core.qweb.render(this.contentTemplate, { widget: this });
            this.$('.o_content').append(content);
        }
    },
    // ...
});
有沒有發現關鍵字 this.contentTemplate
跳到對應的屬性,可以看到 Action 預設有一個 template Action ,並額外定義一個屬性 contentTemplate
// addons/web/static/src/js/chrome/action_mixin.js
const ActionMixin = Object.assign({}, WidgetAdapterMixin, {
    template: 'Action',
    /**
     * The action mixin assumes that it is rendered with the 'Action' template.
     * This template has a special zone ('.o_content') where the content should
     * be added.  Actions that want to automatically render a template there
     * should define the contentTemplate key.  In short, client actions should
     * probably define a contentTemplate key, and not a template key.
     */
    contentTemplate: null,
    // ...
});
而註解也解釋了為什麼要這麼做
(TOEIC 87分翻譯,請多多包涵與指教)
The action mixin assumes that it is rendered with the 'Action' template.
-> Action mixin 已經預設渲染模板 'Action'
This template has a special zone ('.o_content') where the content should be added. 
-> 這個模板有定義特別的區域 ('.o_content'),額外定義內容會加入在這個區域以內
Actions that want to automatically render a template there should define the contentTemplate key. 
-> Actions 會自動渲染 template 的定義,所以若需要自定義模板,則需要定義 'contentTemplate' 屬性
In short, client actions should probably define a contentTemplate key, and not a template key.
-> 簡單來說,Client actions 若需要自定義模板,則定義在 'contentTemplate' 屬性,而不是 'template' 屬性
所以就能清楚 client action view 跟 field widget 的在模板套用上的差異
當然也可以直接覆蓋 template 跟 renderElement() 自己寫一套流程
但就看各位接到需求了